今天來介紹 Python function 的 positional arguments(位置引數),從下面的函式看起:
(註:定義 function 時,傳入的變數稱為「參數(parameter)」;呼叫 function 時傳入的變數稱為「引數(argument)」,不用拘泥於這些名詞。)
def my_func(a, b, c):
print("a={0}, b={1}, c={2}".format(a, b, c))
my_func(1, 2, 3)
a=1, b=2, c=3
你可以定義 function 的參數預設值,這樣傳入引數時,缺少的部分會用預設值代替:
def my_func(a, b=2, c=3):
print("a={0}, b={1}, c={2}".format(a, b, c))
但注意!當你定義了一個有預設值的參數,後面的參數也都要有預設值,否則就掛了:
def fn(a, b=2, c):
print(a, b, c)
Input In [6]
def fn(a, b=2, c):
^
SyntaxError: non-default argument follows default argument
改成下面這樣就OK了:
def my_func(a, b=2, c=3):
print("a={0}, b={1}, c={2}".format(a, b, c))
my_func(10, 20, 30)
a=10, b=20, c=30
my_func(10, 20)
a=10, b=20, c=3
my_func(10)
a=10, b=2, c=3
因為 a 參數沒有預設值,呼叫函式時就一定要闡明它,否則又掛了:
my_func()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/Users/maotingyang/Downloads/Positional Arguments.ipynb Cell 15 in <cell line: 1>()
----> <a href='vscode-notebook-cell:/Users/maotingyang/Downloads/Positional%20Arguments.ipynb#X16sZmlsZQ%3D%3D?line=0'>1</a> my_func()
TypeError: my_func() missing 1 required positional argument: 'a'
傳入引數時可以指定對應的參數,這稱為關鍵字引數。
好處是我們在傳入引數時就不用依照順序傳入:
def my_func(a, b=2, c=3):
print("a={0}, b={1}, c={2}".format(a, b, c))
my_func(c=30, b=20, a=10)
a=10, b=20, c=30
my_func(10, c=30, b=20)
a=10, b=20, c=30
但注意!當你使用了一個關鍵字引數,之後的引數也都要是關鍵字引數,否則又掛了:
my_func(10, b=20, 30)
Input In [15]
my_func(10, b=20, 30)
^
SyntaxError: positional argument follows keyword argument
有設定預設值的參數,就不一定要傳入引數:
my_func(10, c=30)
a=10, b=2, c=30
my_func(a=30, c=10)
a=30, b=2, c=10
my_func(c=10, a=30)
a=30, b=2, c=10
好啦,我們明天見~
參考:Python 3: Deep Dive (Part 1 - Functional)